import { Root } from "protobufjs";
// https://www.npmjs.com/package/protobufjs
// 1.引入json数据
import protoJson from './protobuf/proto.json'; // webpack只认识js或者json,所以需要先将proto转成json
// 2.转化成pb结构对象(又要转回去)
export const root = Root.fromJSON(protoJson)

/**
 * 3.生成消息体/解析响应体
 * @param {string} description 请求体名字
 * @param {object} data 请求数据
 * @return {Buffer} 返回Buffer对象水
*/

export const requestEncode = (regDesction, data) => (){
  const reqDesctionData = root.lookupType(regDesction);// 根据前端传入的reqDesction找到接口需要的参数
  const err = reqDesctionData.verify(data) // 检验传入的参数格式是否正确
  if (err) return false // 如果参数格式不正确就return，当然ts也有保障
  // creates a new message instance from a set of properties that satisfythe requirements of a valid message
  const message = reqDesctionData.create(data) // 创建成消息的格式
  const buffer = reqDesctionData.encode(message).finish() // 解析成一个二进制流
  return buffer
}

/**
 * 解析响应体
 * @param {string} resDesction 返回体名字
 * @param {object} data 返回的数据
 *  @return {object}解析完的数据
*/

export const responseDecode = (resDesction, data) => {
  const resDesctionData = root.lookupType(resDesction);// 根据前端传入的reaDesction找到接口需要的参数
  const err = resDesctionData.verify(data)// 检验传入的参数格式是否正确
  if (err) return false // 如果参数格式不正确就return，当然ts也有保障
  const res = resDesctionData.decode(data)
  const result = resDesctionData.toObject(res, {
    defaults: true
  })
  return result
}

